package ve.usb.ddp;

import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.codec.GifImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.net.URL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

import ve.usb.cohesion.runtime.CohesionAction;

import org.hibernate.Session;
import org.hibernate.Transaction;
import ve.usb.cohesion.runtime.HibernateUtil;
import ve.usb.ddp.hibernate.*;

import java.util.List;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
import ve.usb.cohesion.runtime.LocalDate;

/**
 * 
 */
public class AccionesCU007ManejoPAS extends CohesionAction {
    
/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASAgregarPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASAgregarPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "AGREGAR_PAS");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_BuscarProfesorPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_BuscarProfesorPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_ObservacionesPAS", "A_Pre_ModificarRegistroProfesorPAS", "A_Pre_AgregarPAS", "V_BuscarProfesorPAS", "A_Pre_ModificarPAS", "A_Pre_MontosPAS", "A_Pre_ConsultaAvanzadaPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;
        final int SALIDA_2 = 2;
        final int SALIDA_3 = 3;
        final int SALIDA_4 = 4;
        final int SALIDA_5 = 5;
        final int SALIDA_6 = 6;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_BuscarProfesor fF_BuscarProfesor = (F_BuscarProfesor)form;
            /*Empieza nuestro codigo*/
            int ci = fF_BuscarProfesor.getCi();
            List<Profesor> profesor = (List<Profesor>)s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).list();
            String vengoDe = (String)request.getSession().getAttribute("VENGO_DE");

            if(vengoDe.equals("AGREGAR_PAS")){
                    salida = SALIDA_2;
                    request.getSession().setAttribute("VENGO_DE", "AGREGAR_PAS");
                    request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
            }else if(vengoDe.equals("MODIFICAR_PAS")){
                if(!profesor.isEmpty()){
                    salida = SALIDA_4;
                    request.getSession().setAttribute("VENGO_DE", "MODIFICAR_PAS");
                    request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
                }else{
                    salida = SALIDA_3;
                }
            }else if(vengoDe.equals("MODIFICAR_PROF_PAS")){
                if(!profesor.isEmpty()){
                    salida = SALIDA_1;
                    request.getSession().setAttribute("VENGO_DE", "MODIFICAR_PROF_PAS");
                    request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
                }else{
                    salida = SALIDA_3;
                }
            }else if(vengoDe.equals("OBSERVACIONES_PAS")){
                if(!profesor.isEmpty()){
                        request.getSession().setAttribute("VENGO_DE", "OBSERVACIONES_PAS");
                        request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
                }else{
                    salida = SALIDA_3;
                }
            }else if(vengoDe.equals("MONTOS_PAS")){
                if(!profesor.isEmpty()){
                    salida = SALIDA_5;
                    request.getSession().setAttribute("VENGO_DE", "MONTOS_PAS");
                    request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
                }else{
                    salida = SALIDA_3;
                }
            }else if(vengoDe.equals("CONSULTA_AVANZADA")){
                if(!profesor.isEmpty()){
                    salida = SALIDA_6;
                    request.getSession().setAttribute("VENGO_DE", "CONSULTA_AVANZADA");
                    request.getSession().setAttribute("CI_PROF_BUSCAR", ci);
                }else{
                    salida = SALIDA_3;
                }
            }
            fF_BuscarProfesor.reset(mapping, request);
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==3) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_BuscarProfesorPAS.msg3"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASModificarProfesor.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASModificarProfesor(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "MODIFICAR_PROF_PAS");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_ObservarPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_ObservarPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_PAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_Observacion fF_Observacion = (F_Observacion)form;
             /*Empieza nuestro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
             Pas pasVigencia = (Pas)s.createQuery("from Pas pas where pas.fecha_finalizacion >= CURRENT_DATE " +
                        "AND pas.profesor.ci=:ci").setInteger("ci", ci).list().get(0);
            if(!fF_Observacion.getNuevaObservacion().equals("")){
                Observacion_Pas newObs = new Observacion_Pas();
                newObs.setFecha(new ve.usb.cohesion.runtime.LocalDate(fF_Observacion.getFechaObservacion()));
                newObs.setTexto(fF_Observacion.getNuevaObservacion());
                newObs.setPas(pasVigencia);
                pasVigencia.addToObservaciones(newObs);
                s.save(newObs);
                s.update(pasVigencia);
                s.flush();
                fF_Observacion.reset(mapping, request);
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg","Observación agregada con éxito.");
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASConsultaAvanzada.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASConsultaAvanzada(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pai, director_DDP, encargado_paa, encargado_pas, encargado_prd
            if (!CohesionActor.checkActor(request, 62)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "CONSULTA_AVANZADA");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_GenerarPDFConsultaAvanzadaPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_GenerarPDFConsultaAvanzadaPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_ConsultaAvanzadaPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_prd, director_DDP, encargado_pas, encargado_pai, encargado_paa
            if (!CohesionActor.checkActor(request, 62)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            int montoTramPas = (Integer)request.getSession()
                    .getAttribute("montoTramPas");
            List<Pas> L_Pas = (List<Pas>)request.getSession()
                    .getAttribute("L_Pas");
            Profesor profs = (Profesor)request.getSession()
                    .getAttribute("prof");
             String nombrePDF = "PAS - Historia PAS del profesor "+profs.getPrimerNombre()+
                                 " "+profs.getSegundoNombre()+" "+profs.getPrimerApellido()+
                                 " "+profs.getSegundoApellido();
             String tituloPDF = "PAS - Historia PAS del profesor "+profs.getPrimerNombre()+
                                 " "+profs.getSegundoNombre()+" "+profs.getPrimerApellido()+
                                 " "+profs.getSegundoApellido();

             // Le indico al Servlet que voy a enviar un archivo pdf
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", " attachment; filename=\""+nombrePDF+".pdf\"");
            // Nuevo documento PDF con la pagina horizontal
            Document document = new Document(PageSize.LETTER.rotate());
            try {
                // Fuerzo al usuario a que descargue el archivo a su computador
                PdfWriter.getInstance(document, response.getOutputStream());
                document.open();

                //Seteo de la cebolla
                URL base = this.getClass().getResource("");
                String path = new File(base.getFile(), "/../../../../../css/images/Cebolla001tr.gif").getCanonicalPath();
                GifImage img = new GifImage(path);
                int frame_count = img.getFrameCount();
                for(int i = 1; i <= frame_count; i++){
                    document.add(img.getImage(i));
                }

                //Seteo Membrete
                document.add(new Paragraph("Universidad Simón Bolívar\nDepartamento de Desarrollo Profesoral\n" +
                                           "Programa Actualización Académica"));

                //Seteo el titulo y lo agrego al documento
                Paragraph title = new Paragraph(tituloPDF, FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLD));
                title.setAlignment(Element.ALIGN_CENTER);
                title.setSpacingAfter(25);
                document.add(title);

                document.add(new Paragraph("Datos Personales"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos = new float[10];
                anchos[0] = 12;//Apellidos
                anchos[1] = 12;//Nombres
                anchos[2] = 9;//Cedula
                anchos[3] = 5;//Edad
                anchos[4] = 15;//Email
                anchos[5] = 10;//Categoria
                anchos[6] = 10;//Division
                anchos[7] = 13;//Departamen
                anchos[8] = 15;//Fecha ingresa USB
                anchos[9] = 10;//Novel

                //Creo la tabla
                PdfPTable table = new PdfPTable(10);
                table.setWidthPercentage(100);
                table.setWidths(anchos);

                //Anado los headers a la tabla
                table.addCell("Apellidos");
                table.addCell("Nombres");
                table.addCell("Cédula");
                table.addCell("Edad");
                table.addCell("Email");
                table.addCell("Categoría");
                table.addCell("División");
                table.addCell("Departamento");
                table.addCell("Fecha de ingreso USB");
                table.addCell("¿Es novel?");

                //Agrego los datos a la tabla
                table.addCell(profs.getPrimerApellido() + " " + profs.getSegundoApellido());//Apellidos
                table.addCell(profs.getPrimerNombre() + " " + profs.getSegundoNombre());//Nombres
                table.addCell(Integer.toString(profs.getCi()));//Cedula
                table.addCell(profs.getEdad());//Edad
                table.addCell(profs.getCorreo());//Email
                table.addCell(profs.getCategoria());//Categoria
                table.addCell(profs.getDivision());//Division
                table.addCell(profs.getDepartamento());//Departamento
                table.addCell(profs.getFec_Ing_USB().toString());//Fecha ingreso usb
                if(profs.getNovel()){
                    table.addCell("Si");
                }else{
                    table.addCell("No");
                }
                // Agrego la tabla creada al documento
                document.add(table);

                document.add(new Paragraph("Ubicación"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos1 = new float[3];
                anchos1[0] = 10;//Lapsos
                anchos1[1] = 10;//Pais
                anchos1[2] = 10;//Universidad

                //Creo la tabla
                PdfPTable table1 = new PdfPTable(3);
                table1.setWidthPercentage(100);
                table1.setWidths(anchos1);

                //Anado los headers a la tabla
                table1.addCell("Lapso");
                table1.addCell("País");
                table1.addCell("Universidad");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table1.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());//Lapso
                    table1.addCell(pas.getPais());//Pais
                    table1.addCell(pas.getUniversidad());//Universiad
                }
                // Agrego la tabla creada al documento
                document.add(table1);


                document.add(new Paragraph("Trámite de Divisas"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos2 = new float[4];
                anchos2[0] = 10;//Lapsos
                anchos2[1] = 10;//Fecha tramite
                anchos2[2] = 10;//Fecha proximo tramite
                anchos2[3] = 10;//Monto

                //Creo la tabla
                PdfPTable table2 = new PdfPTable(4);
                table2.setWidthPercentage(100);
                table2.setWidths(anchos2);

                //Anado los headers a la tabla
                table2.addCell("Lapso");
                table2.addCell("Fecha trámite");
                table2.addCell("Fecha próximo trámite");
                table2.addCell("Monto");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table2.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());//Lapso
                    //Defino las relaciones de tamano entre las columnas
                    float[] anchos3 = new float[1];
                    anchos3[0] = 10;//Fecha tramite

                    //Creo la tabla
                    PdfPTable table3 = new PdfPTable(1);
                    table3.setWidthPercentage(100);
                    table3.setWidths(anchos3);
                    //Creo la tabla
                    PdfPTable table4 = new PdfPTable(1);
                    table4.setWidthPercentage(100);
                    table4.setWidths(anchos3);
                    //Creo la tabla
                    PdfPTable table5 = new PdfPTable(1);
                    table5.setWidthPercentage(100);
                    table5.setWidths(anchos3);
                    for(Monto monto : pas.getMontos()){
                        table3.addCell(monto.getFecha_tramite().toString());//Fecha tramite
                        table4.addCell(monto.getFecha_prox_tramite().toString());//Fecha proximo tramite
                        table5.addCell(String.valueOf(monto.getMonto())+"$");//Monto
                    }
                    table2.addCell(table3);
                    table2.addCell(table4);
                    table2.addCell(table5);
                }
                // Agrego la tabla creada al documento
                document.add(table2);

                document.add(new Paragraph("Otro"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos4 = new float[2];
                anchos4[0] = 10;//Lapsos
                anchos4[1] = 10;//Fecha tramite

                //Creo la tabla
                PdfPTable table6 = new PdfPTable(2);
                table6.setWidthPercentage(100);
                table6.setWidths(anchos4);

                //Anado los headers a la tabla
                table6.addCell("Lapso");
                table6.addCell("¿Tiene autorización de descuento por CADIVI?");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table6.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());
                    if(pas.getProf_desc_cadivi()){
                        table6.addCell("Si");
                    }else{
                        table6.addCell("No");
                    }
                }
                // Agrego la tabla creada al documento
                document.add(table6);

                } catch (Exception ex) {
                throw ex;
            }
            document.close();
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_EnviarCorreoConsultaAvanzadaPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_EnviarCorreoConsultaAvanzadaPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_EnviarCorreoPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, encargado_pai, director_DDP, encargado_paa, encargado_prd
            if (!CohesionActor.checkActor(request, 62)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            F_EnviarCorreo fF_EnviarCorreo = new F_EnviarCorreo();
            Usuario userCon = (Usuario)request.getSession().getAttribute("u_conectado");
            String correo = new String();
            correo = userCon.getCorreo();
            fF_EnviarCorreo.setAsunto("DDP - Consulta Avanzada PAS");
            fF_EnviarCorreo.setDestinatario(correo);
            request.getSession().setAttribute("F_EnviarCorreo", fF_EnviarCorreo);
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_EnviarCorreoPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_EnviarCorreoPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_PAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, encargado_paa, encargado_prd, director_DDP, encargado_pai
            if (!CohesionActor.checkActor(request, 62)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_EnviarCorreo  fF_EnviarCorreo = (F_EnviarCorreo)form;
            /*Empieza nuestro codigo*/
            int montoTramPas = (Integer)request.getSession()
                    .getAttribute("montoTramPas");
            List<Pas> L_Pas = (List<Pas>)request.getSession()
                    .getAttribute("L_Pas");
            Profesor profs = (Profesor)request.getSession()
                    .getAttribute("prof");
             String nombrePDF = "PAS - Historia PAS del profesor "+profs.getPrimerNombre()+
                                 " "+profs.getSegundoNombre()+" "+profs.getPrimerApellido()+
                                 " "+profs.getSegundoApellido();
             String tituloPDF = "PAS - Historia PAS del profesor "+profs.getPrimerNombre()+
                                 " "+profs.getSegundoNombre()+" "+profs.getPrimerApellido()+
                                 " "+profs.getSegundoApellido();

             // Le indico al Servlet que voy a enviar un archivo pdf
            // Nuevo documento PDF con la pagina horizontal
            Document document = new Document(PageSize.LETTER.rotate());
            ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
            try {
                // Fuerzo al usuario a que descargue el archivo a su computador
                PdfWriter.getInstance(document, baosPDF);
                document.open();

                //Seteo de la cebolla
                URL base = this.getClass().getResource("");
                String path = new File(base.getFile(), "/../../../../../css/images/Cebolla001tr.gif").getCanonicalPath();
                GifImage img = new GifImage(path);
                int frame_count = img.getFrameCount();
                for(int i = 1; i <= frame_count; i++){
                    document.add(img.getImage(i));
                }

                //Seteo Membrete
                document.add(new Paragraph("Universidad Simón Bolívar\nDepartamento de Desarrollo Profesoral\n" +
                                           "Programa Actualización Académica"));

                //Seteo el titulo y lo agrego al documento
                Paragraph title = new Paragraph(tituloPDF, FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLD));
                title.setAlignment(Element.ALIGN_CENTER);
                title.setSpacingAfter(25);
                document.add(title);

                document.add(new Paragraph("Datos Personales"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos = new float[10];
                anchos[0] = 12;//Apellidos
                anchos[1] = 12;//Nombres
                anchos[2] = 9;//Cedula
                anchos[3] = 5;//Edad
                anchos[4] = 15;//Email
                anchos[5] = 10;//Categoria
                anchos[6] = 10;//Division
                anchos[7] = 13;//Departamen
                anchos[8] = 15;//Fecha ingresa USB
                anchos[9] = 10;//Novel

                //Creo la tabla
                PdfPTable table = new PdfPTable(10);
                table.setWidthPercentage(100);
                table.setWidths(anchos);

                //Anado los headers a la tabla
                table.addCell("Apellidos");
                table.addCell("Nombres");
                table.addCell("Cédula");
                table.addCell("Edad");
                table.addCell("Email");
                table.addCell("Categoría");
                table.addCell("División");
                table.addCell("Departamento");
                table.addCell("Fecha de ingreso USB");
                table.addCell("¿Es novel?");

                //Agrego los datos a la tabla
                table.addCell(profs.getPrimerApellido() + " " + profs.getSegundoApellido());//Apellidos
                table.addCell(profs.getPrimerNombre() + " " + profs.getSegundoNombre());//Nombres
                table.addCell(Integer.toString(profs.getCi()));//Cedula
                table.addCell(profs.getEdad());//Edad
                table.addCell(profs.getCorreo());//Email
                table.addCell(profs.getCategoria());//Categoria
                table.addCell(profs.getDivision());//Division
                table.addCell(profs.getDepartamento());//Departamento
                table.addCell(profs.getFec_Ing_USB().toString());//Fecha ingreso usb
                if(profs.getNovel()){
                    table.addCell("Si");
                }else{
                    table.addCell("No");
                }
                // Agrego la tabla creada al documento
                document.add(table);

                document.add(new Paragraph("Ubicación"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos1 = new float[3];
                anchos1[0] = 10;//Lapsos
                anchos1[1] = 10;//Pais
                anchos1[2] = 10;//Universidad

                //Creo la tabla
                PdfPTable table1 = new PdfPTable(3);
                table1.setWidthPercentage(100);
                table1.setWidths(anchos1);

                //Anado los headers a la tabla
                table1.addCell("Lapso");
                table1.addCell("País");
                table1.addCell("Universidad");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table1.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());//Lapso
                    table1.addCell(pas.getPais());//Pais
                    table1.addCell(pas.getUniversidad());//Universiad
                }
                // Agrego la tabla creada al documento
                document.add(table1);


                document.add(new Paragraph("Trámite de Divisas"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos2 = new float[4];
                anchos2[0] = 10;//Lapsos
                anchos2[1] = 10;//Fecha tramite
                anchos2[2] = 10;//Fecha proximo tramite
                anchos2[3] = 10;//Monto

                //Creo la tabla
                PdfPTable table2 = new PdfPTable(4);
                table2.setWidthPercentage(100);
                table2.setWidths(anchos2);

                //Anado los headers a la tabla
                table2.addCell("Lapso");
                table2.addCell("Fecha trámite");
                table2.addCell("Fecha próximo trámite");
                table2.addCell("Monto");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table2.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());//Lapso
                    //Defino las relaciones de tamano entre las columnas
                    float[] anchos3 = new float[1];
                    anchos3[0] = 10;//Fecha tramite

                    //Creo la tabla
                    PdfPTable table3 = new PdfPTable(1);
                    table3.setWidthPercentage(100);
                    table3.setWidths(anchos3);
                    //Creo la tabla
                    PdfPTable table4 = new PdfPTable(1);
                    table4.setWidthPercentage(100);
                    table4.setWidths(anchos3);
                    //Creo la tabla
                    PdfPTable table5 = new PdfPTable(1);
                    table5.setWidthPercentage(100);
                    table5.setWidths(anchos3);
                    for(Monto monto : pas.getMontos()){
                        table3.addCell(monto.getFecha_tramite().toString());//Fecha tramite
                        table4.addCell(monto.getFecha_prox_tramite().toString());//Fecha proximo tramite
                        table5.addCell(String.valueOf(monto.getMonto())+"$");//Monto
                    }
                    table2.addCell(table3);
                    table2.addCell(table4);
                    table2.addCell(table5);
                }
                // Agrego la tabla creada al documento
                document.add(table2);

                document.add(new Paragraph("Otro"));

                //Defino las relaciones de tamano entre las columnas
                float[] anchos4 = new float[2];
                anchos4[0] = 10;//Lapsos
                anchos4[1] = 10;//Fecha tramite

                //Creo la tabla
                PdfPTable table6 = new PdfPTable(2);
                table6.setWidthPercentage(100);
                table6.setWidths(anchos4);

                //Anado los headers a la tabla
                table6.addCell("Lapso");
                table6.addCell("¿Tiene autorización de descuento por CADIVI?");

                //Agrego los datos a la tabla
                for (int i = 0; i<L_Pas.size();i++) {
                    Pas pas = L_Pas.get(i);
                    table6.addCell(pas.getFecha_inicio().toString() + " - " + pas.getFecha_finalizacion().toString());
                    if(pas.getProf_desc_cadivi()){
                        table6.addCell("Si");
                    }else{
                        table6.addCell("No");
                    }
                }
                // Agrego la tabla creada al documento
                document.add(table6);

                } catch (Exception ex) {
                throw ex;
            }
            document.close();

            String destinatario = (String) fF_EnviarCorreo.getDestinatario();
            String asunto = (String) fF_EnviarCorreo.getAsunto();
            String mensaje = (String) fF_EnviarCorreo.getMensaje();

            //Remitente
            final String CORREO_REMITENTE = "notificacion.ddp@gmail.com";
            final String PASS_CORREO_REMITENTE = "ddponline";
            // Propiedades de la conexión
            Properties props = new Properties();
            props.setProperty("mail.smtp.host", "smtp.ldc.usb.ve");
            props.setProperty("mail.smtp.starttls.enable", "true");
            // Puerto de gmail para envio de correos
//            props.setProperty("mail.smtp.port", "587");
            // Nombre del usuario
            props.setProperty("mail.smtp.user", CORREO_REMITENTE);
            // Definimos si se requiere o no usuario y password para conectarse
            props.setProperty("mail.smtp.auth", "true");
            // Preparamos la sesion
            javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);







            // Construimos el mensaje
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(CORREO_REMITENTE));
            // Agregamos DESTINATARIO
            String[] correos = destinatario.split(",");
            for (int i = 0; i < correos.length; i++) {
                message.addRecipients(Message.RecipientType.TO, correos[i]);
            }
            // Seteamos ASUNTO
            message.setSubject(asunto);
            // Agregamos MENSAJE DE TEXTO O HTML
//            message.setText(mensaje);


            // create the message part
    MimeBodyPart messageBodyPart =
      new MimeBodyPart();

    //fill message
    messageBodyPart.setText(mensaje);

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Part two is attachment
    messageBodyPart = new MimeBodyPart();
//    DataSource source = new FileDataSource(fileAttachment);
    messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(baosPDF.toByteArray(), "application/pdf")));
    messageBodyPart.setFileName(nombrePDF+".pdf");
    multipart.addBodyPart(messageBodyPart);

    // Put parts in message
    message.setContent(multipart);




            // Especificamos el protocolo a usar, en nuestro caso smtp
            Transport t = session.getTransport("smtp");
            t.connect(CORREO_REMITENTE, PASS_CORREO_REMITENTE);
            //Transport.send(message);
            // Se envia el mensaje a todos lo destinatarios en el array Recipients
            t.sendMessage(message, message.getAllRecipients());
            // Cierre.
            t.close();


            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_EnviarCorreoPAS.msg0"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASObservaciones.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASObservaciones(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "OBSERVACIONES_PAS");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_ModificarRegistroProfesorPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_ModificarRegistroProfesorPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_ModificarRegistroProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            Profesor prof = (Profesor)s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).uniqueResult();
            F_DatosProfesor fF_DatosProfesor = new F_DatosProfesor();
            fF_DatosProfesor.setCategoria(prof.getCategoria());
            fF_DatosProfesor.setCi(prof.getCi());
            fF_DatosProfesor.setDepartamento(prof.getDepartamento());
            fF_DatosProfesor.setDivision(prof.getDivision());
            fF_DatosProfesor.setCorreo(prof.getCorreo());
            fF_DatosProfesor.setFecha_Ingreso_USB(prof.getFec_Ing_USB().toString());
            fF_DatosProfesor.setFecha_Nacimiento(prof.getFec_Nac().toString());
            fF_DatosProfesor.setNovel(prof.getNovel());
            fF_DatosProfesor.setPrimerApellido(prof.getPrimerApellido());
            fF_DatosProfesor.setPrimerNombre(prof.getPrimerNombre());
            fF_DatosProfesor.setSegundoApellido(prof.getSegundoApellido());
            fF_DatosProfesor.setSegundoNombre(prof.getSegundoNombre());

            request.getSession().setAttribute("F_DatosProfesor", fF_DatosProfesor);
            request.getSession().setAttribute("L_Categorias", prof.getCategoriasUSB());
            request.getSession().setAttribute("L_Divisiones", prof.getDivisionesUSB());
            request.getSession().setAttribute("L_Departamentos", prof.getDepartamentosUSB());
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_AgregarPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_AgregarPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_AgregarPAS","A_Pre_BuscarProfesorPASAgregarPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            String query = "SELECT DISTINCT profesor.primernombre, profesor.primerapellido, pas.universidad, pas.pais " +
                           "FROM \"public\".profesor AS profesor, \"public\".pas AS pas " +
                           "WHERE pas.profesor = profesor.idprofesor " +
                           "  AND pas.fecha_inicio < CURRENT_DATE " +
                           "  AND CURRENT_DATE < pas.fecha_finalizacion " +
                           "  AND profesor.ci=:ci";
            List<Object[]> profEnAnoSab = (List<Object[]>)s.createSQLQuery(query)
                    .setInteger("ci", ci).list();
            List <Profesor> profs = s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).list();
            Profesor prof = new Profesor();
            F_RegistroPas fF_RegistroPas = new F_RegistroPas();
            if(profs.size() == 1){
                prof = profs.get(0);
                fF_RegistroPas.setCategoria(prof.getCategoria());
                fF_RegistroPas.setCi(prof.getCi());
                fF_RegistroPas.setDepartamento(prof.getDepartamento());
                fF_RegistroPas.setDivision(prof.getDivision());
                fF_RegistroPas.setCorreo(prof.getCorreo());
                fF_RegistroPas.setFecha_Ingreso_USB(prof.getFec_Ing_USB().toString());
                fF_RegistroPas.setFecha_Nacimiento(prof.getFec_Nac().toString());
                fF_RegistroPas.setNovel(prof.getNovel());
                fF_RegistroPas.setPrimerApellido(prof.getPrimerApellido());
                fF_RegistroPas.setPrimerNombre(prof.getPrimerNombre());
                fF_RegistroPas.setSegundoApellido(prof.getSegundoApellido());
                fF_RegistroPas.setSegundoNombre(prof.getSegundoNombre());
            }else{
               fF_RegistroPas.setCi(ci);
            }

            request.getSession().setAttribute("F_RegistroPas", fF_RegistroPas);
            request.getSession().setAttribute("L_Categorias", prof.getCategoriasUSB());
            request.getSession().setAttribute("L_Divisiones", prof.getDivisionesUSB());
            request.getSession().setAttribute("L_Departamentos", prof.getDepartamentosUSB());
            request.getSession().setAttribute("L_Paises", fF_RegistroPas.paisesLista());

            if (!profEnAnoSab.isEmpty()){
                Object[] profEnAS = profEnAnoSab.get(0);
                String msg = "El profesor " + profEnAS[0] +" " + profEnAS[1] +
                             " está de año sabático en " + profEnAS[3] +
                             " en la Universidad " + profEnAS[2];
                request.setAttribute("msg", msg);
                salida = SALIDA_1;
            }

            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_ObservacionesPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_ObservacionesPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_ObservacionesPAS", "V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            int ci = (Integer) request.getSession().getAttribute("CI_PROF_BUSCAR");
            F_Observacion fF_Observacion = new F_Observacion();
            fF_Observacion.setFechaObservacion(new LocalDate(new Date()).toString());
            List<Observacion_Pas> listObsPAS = (List<Observacion_Pas>) s.createQuery("from Observacion_Pas "
                    + "obspas where obspas.pas.fecha_finalizacion >= CURRENT_DATE AND "
                    + "obspas.pas.profesor.ci=:ci ORDER BY obspas.fecha DESC").setInteger("ci", ci).list();
            List<Profesor> listProfesor = (List<Profesor>) s.createQuery("FROM Profesor WHERE ci="+ci).list();

            if (!listObsPAS.isEmpty()) {
                Pas pas = (Pas) listObsPAS.get(0).getPas();
                for (Observacion_Pas obs : listObsPAS) {
                    obs.getFecha();
                    obs.getTexto();
                }
                request.getSession().setAttribute("Profesor", listProfesor.get(0));
                request.getSession().setAttribute("L_Observaciones", listObsPAS);
                request.getSession().setAttribute("PAS_VIGENCIA", pas);
                request.getSession().setAttribute("F_Observacion", fF_Observacion);
            } else {
                salida = SALIDA_1;
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_Pre_ObservacionesPAS.msg1"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASModificarPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASModificarPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "MODIFICAR_PAS");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_ModificarPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_ModificarPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_ModificarPAS", "V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            List<Pas> listPas = (List<Pas>)s.createQuery("from Pas pas where pas.fecha_finalizacion >= CURRENT_DATE " +
                    "AND pas.profesor.ci=:ci").setInteger("ci", ci).list();
            F_RegistroPas fF_RegistroPas = new F_RegistroPas();
            if(!listPas.isEmpty()){
                Pas pas = listPas.get(0);
                Profesor prof = pas.getProfesor();
                fF_RegistroPas.setCategoria(prof.getCategoria());
                fF_RegistroPas.setCi(prof.getCi());
                fF_RegistroPas.setDepartamento(prof.getDepartamento());
                fF_RegistroPas.setDivision(prof.getDivision());
                fF_RegistroPas.setCorreo(prof.getCorreo());
                fF_RegistroPas.setFecha_Ingreso_USB(prof.getFec_Ing_USB().toString());
                fF_RegistroPas.setFecha_Nacimiento(prof.getFec_Nac().toString());
                fF_RegistroPas.setNovel(prof.getNovel());
                fF_RegistroPas.setPrimerApellido(prof.getPrimerApellido());
                fF_RegistroPas.setPrimerNombre(prof.getPrimerNombre());
                fF_RegistroPas.setSegundoApellido(prof.getSegundoApellido());
                fF_RegistroPas.setSegundoNombre(prof.getSegundoNombre());
                fF_RegistroPas.setFecha_finalizacion(pas.getFecha_finalizacion().toString());
                fF_RegistroPas.setFecha_inicio(pas.getFecha_inicio().toString());
                fF_RegistroPas.setProf_desc_cadivi(pas.getProf_desc_cadivi());
                fF_RegistroPas.setUniversidad(pas.getUniversidad());
                fF_RegistroPas.setPais(pas.getPais());

                request.getSession().setAttribute("F_RegistroPas", fF_RegistroPas);
                List<Monto> listMontos = (List<Monto>)s.createQuery("FROM Monto monto WHERE " +
                        "monto.pas.id=:idPas ORDER BY monto.fecha_tramite ASC").setLong("idPas", pas.getId()).list();
                request.getSession().setAttribute("L_Montos", listMontos);
                request.getSession().setAttribute("L_Categorias", prof.getCategoriasUSB());
                request.getSession().setAttribute("L_Divisiones", prof.getDivisionesUSB());
                request.getSession().setAttribute("L_Departamentos", prof.getDepartamentosUSB());
                request.getSession().setAttribute("L_Paises", fF_RegistroPas.paisesLista());
            }else{
                salida = SALIDA_1;
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_Pre_ModificarPAS.msg1"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_DatosPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_DatosPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_PAS", "A_Pre_PAS", "A_Pre_AgregarPAS", "A_Pre_ModificarPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;
        final int SALIDA_2 = 2;
        final int SALIDA_3 = 3;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_RegistroPas fF_RegistroPas = (F_RegistroPas)form;
            /*Comienza nuestro codigo*/
            String vengoDe = (String)request.getSession().getAttribute("VENGO_DE");
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            List<Profesor> listProfesores = (List<Profesor>)s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).list();
            Pas pas = new Pas();
            Profesor profesor;
            if(vengoDe.equals("AGREGAR_PAS")){
                if(listProfesores.size()==1){
                    profesor = listProfesores.get(0);
                }else{
                    profesor = new Profesor();
                }
                
                profesor.setCategoria(fF_RegistroPas.getCategoria());
                profesor.setCi(fF_RegistroPas.getCi());
                profesor.setCorreo(fF_RegistroPas.getCorreo());
                profesor.setDepartamento(fF_RegistroPas.getDepartamento());
                profesor.setDivision(fF_RegistroPas.getDivision());

                //Chequeo de fechas
                if (fF_RegistroPas.getFecha_Ingreso_USB().equals("")) {
                    profesor.setFec_Ing_USB(null);
                } else {
                    profesor.setFec_Ing_USB(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_Ingreso_USB()));
                }
                if (fF_RegistroPas.getFecha_Nacimiento().equals("")) {
                    profesor.setFec_Nac(null);
                } else {
                    profesor.setFec_Nac(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_Nacimiento()));
                }
                
                
                profesor.setNovel(fF_RegistroPas.getNovel());
                profesor.setPrimerApellido(fF_RegistroPas.getPrimerApellido());
                profesor.setPrimerNombre(fF_RegistroPas.getPrimerNombre());
                profesor.setSegundoApellido(fF_RegistroPas.getSegundoApellido());
                profesor.setSegundoNombre(fF_RegistroPas.getSegundoNombre());
                pas.setProfesor(profesor);

                //Chequeo de fechas
                if (fF_RegistroPas.getFecha_finalizacion().equals("")) {
                    pas.setFecha_finalizacion(null);
                } else {
                    pas.setFecha_finalizacion(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_finalizacion()));
                }
                if (fF_RegistroPas.getFecha_inicio().equals("")) {
                    pas.setFecha_inicio(null);
                } else {
                    pas.setFecha_inicio(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_inicio()));
                }

                pas.setProf_desc_cadivi(fF_RegistroPas.getProf_desc_cadivi());
                pas.setUniversidad(fF_RegistroPas.getUniversidad());
                pas.setPais(fF_RegistroPas.getPais());

                Monto monto= new Monto();

                monto.setMonto(fF_RegistroPas.getMonto());
                monto.setPas(pas);

                //Chequeo de fechas
                if (fF_RegistroPas.getFecha_tramite().equals("")) {
                    monto.setFecha_tramite(null);
                } else {
                    monto.setFecha_tramite(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_tramite()));
                }
                if (fF_RegistroPas.getFecha_prox_tramite().equals("")) {
                    monto.setFecha_prox_tramite(null);
                } else {
                    monto.setFecha_prox_tramite(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_prox_tramite()));
                }

                Observacion_Pas obsPAS = new Observacion_Pas();
                obsPAS.setFecha(new ve.usb.cohesion.runtime.LocalDate(fF_RegistroPas.getFechaObservacion()));
                obsPAS.setTexto(fF_RegistroPas.getObservaciones());
                obsPAS.setPas(pas);
                pas.addToObservaciones(obsPAS);
                profesor.addToPas(pas);
                pas.addToMontos(monto);
                if(listProfesores.size()==1){
                    s.update(profesor);
                    s.save(pas);
                    s.save(monto);
                    s.save(obsPAS);
                    s.flush();
                }else{
                    s.save(profesor);
                    s.save(pas);
                    s.save(monto);
                    s.save(obsPAS);                    
                    s.flush();
                }
            }else if(vengoDe.equals("MODIFICAR_PAS")){
                profesor = listProfesores.get(0);
                profesor.setCategoria(fF_RegistroPas.getCategoria());
                profesor.setCi(fF_RegistroPas.getCi());
                profesor.setCorreo(fF_RegistroPas.getCorreo());
                profesor.setDepartamento(fF_RegistroPas.getDepartamento());
                profesor.setDivision(fF_RegistroPas.getDivision());

                //Chequeo de fechas
                if (fF_RegistroPas.getFecha_Ingreso_USB().equals("")) {
                    profesor.setFec_Ing_USB(null);
                } else {
                    profesor.setFec_Ing_USB(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_Ingreso_USB()));
                }
                if (fF_RegistroPas.getFecha_Nacimiento().equals("")) {
                    profesor.setFec_Nac(null);
                } else {
                    profesor.setFec_Nac(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_Nacimiento()));
                }

                profesor.setNovel(fF_RegistroPas.getNovel());
                profesor.setPrimerApellido(fF_RegistroPas.getPrimerApellido());
                profesor.setPrimerNombre(fF_RegistroPas.getPrimerNombre());
                profesor.setSegundoApellido(fF_RegistroPas.getSegundoApellido());
                profesor.setSegundoNombre(fF_RegistroPas.getSegundoNombre());
                Pas pasUpdate = (Pas)s.createQuery("from Pas pas where pas.fecha_finalizacion >= CURRENT_DATE " +
                        "AND pas.profesor.ci=:ci").setInteger("ci", profesor.getCi()).list().get(0);
                pasUpdate.setProfesor(profesor);

                //Chequeo de fechas
                if (fF_RegistroPas.getFecha_finalizacion().equals("")) {
                    pasUpdate.setFecha_finalizacion(null);
                } else {
                    pasUpdate.setFecha_finalizacion(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_finalizacion()));
                }
                if (fF_RegistroPas.getFecha_inicio().equals("")) {
                    pasUpdate.setFecha_inicio(null);
                } else {
                    pasUpdate.setFecha_inicio(new ve.usb.cohesion.runtime
                            .LocalDate(fF_RegistroPas.getFecha_inicio()));
                }

                pasUpdate.setProf_desc_cadivi(fF_RegistroPas.getProf_desc_cadivi());
                pasUpdate.setUniversidad(fF_RegistroPas.getUniversidad());
                pasUpdate.setPais(fF_RegistroPas.getPais());
                
                profesor.addToPas(pasUpdate);
                s.update(pasUpdate);
                s.update(profesor);
                s.flush();
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosPAS.msg0"));
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosPAS.msg1"));
        }
        if (salida==2) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosPAS.msg2"));
        }
        if (salida==3) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosPAS.msg3"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_DatosProfesorPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_DatosProfesorPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_PAS", "A_Pre_PAS", "A_Pre_ModificarRegistroProfesorPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;
        final int SALIDA_2 = 2;

        int salida = SALIDA_0;
//Checking for actors encargado_pas, director_DDP
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_DatosProfesor fF_DatosProfesor = (F_DatosProfesor)form;
            /*Comienza nuestro codigo*/
            String vengoDe = (String)request.getSession().getAttribute("VENGO_DE");
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            Profesor profesor = (Profesor)s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).uniqueResult();
            profesor.setCategoria(fF_DatosProfesor.getCategoria());
            profesor.setCi(fF_DatosProfesor.getCi());
            profesor.setDepartamento(fF_DatosProfesor.getDepartamento());
            profesor.setDivision(fF_DatosProfesor.getDivision());
            profesor.setCorreo(fF_DatosProfesor.getCorreo());
            profesor.setFec_Ing_USB(new ve.usb.cohesion.runtime.LocalDate(fF_DatosProfesor.getFecha_Ingreso_USB()));
            profesor.setFec_Nac(new ve.usb.cohesion.runtime.LocalDate(fF_DatosProfesor.getFecha_Nacimiento()));
            profesor.setNovel(fF_DatosProfesor.getNovel());
            profesor.setPrimerApellido(fF_DatosProfesor.getPrimerApellido());
            profesor.setPrimerNombre(fF_DatosProfesor.getPrimerNombre());
            profesor.setSegundoApellido(fF_DatosProfesor.getSegundoApellido());
            profesor.setSegundoNombre(fF_DatosProfesor.getSegundoNombre());
            s.update(profesor);
            s.flush();
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosProfesorPAS.msg0"));
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosProfesorPAS.msg1"));
        }
        if (salida==2) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_DatosProfesorPAS.msg2"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_ModificarMontos.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_ModificarMontos(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_ModificarPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_ModificarMontosPas fF_ModificarMontosPas = (F_ModificarMontosPas)form;
            /*Empieza nuestro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            List<Profesor> listProfesores = (List<Profesor>)s.createQuery("from Profesor prof where prof.ci=:ci")
                    .setInteger("ci", ci).list();
            Pas pasUpdate = (Pas)s.createQuery("from Pas pas where pas.fecha_finalizacion >= CURRENT_DATE " +
                        "AND pas.profesor.ci=:ci").setInteger("ci", listProfesores.get(0).getCi()).list().get(0);
            List<Monto> listMontos = (List<Monto>)s.createQuery("FROM Monto monto WHERE " +
                        "monto.pas.id=:idPas ORDER BY monto.fecha_tramite ASC").setLong("idPas", pasUpdate.getId()).list();

            String[] fchProxTrm = fF_ModificarMontosPas.getFecha_prox_tramite_modif();
            String[] fchTrm = fF_ModificarMontosPas.getFecha_tramite_modif();
            String[] montosString = fF_ModificarMontosPas.getMonto_modificar();
            int[] montosInt = new int[montosString.length];
            int i = 0;

            if (fchProxTrm.length == fchTrm.length && fchTrm.length == montosString.length){
                for(String montoString : montosString){
                    if (!montosString[i].equals("")){
                        montosInt[i] = Integer.parseInt(montosString[i]);
                        i++;
                    }else{
                        montosInt[i] = 0;
                        i++;
                    }
                }
                i = 0;
                for(Monto monto : listMontos){
                    if (montosInt[i] == 0 && monto.getMonto() == 0 || montosInt[i] != 0){
                        monto.setMonto(montosInt[i]);
                    }
                    
                    //Chequeo de fechas
                    if (fchTrm[i].equals("")) {
                        
                    } else {
                        monto.setFecha_tramite(new ve.usb.cohesion.runtime
                                .LocalDate(fchTrm[i]));
                    }
                    if (fchProxTrm[i].equals("")) {
                        
                    } else {
                        monto.setFecha_prox_tramite(new ve.usb.cohesion.runtime
                                .LocalDate(fchProxTrm[i]));
                    }
                    i++;
                    s.update(monto);
                    s.flush();
                }
            }

            fF_ModificarMontosPas.reset(mapping, request);
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_ModificarMontos.msg0"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_BuscarProfesorPASMontos.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_BuscarProfesorPASMontos(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Empieza nuestro codigo*/
            request.getSession().setAttribute("VENGO_DE", "MONTOS_PAS");
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_MontosPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_MontosPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_MontosPAS", "V_BuscarProfesorPAS", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Comienza nuetro codigo*/
            int ci = (Integer)request.getSession().getAttribute("CI_PROF_BUSCAR");
            List<Monto> listMonto = (List<Monto>)s.createQuery("from Monto " +
                    "monto where monto.pas.fecha_finalizacion >= CURRENT_DATE AND " +
                    "monto.pas.profesor.ci=:ci ORDER BY monto.fecha_tramite DESC").setInteger("ci", ci).list();
            if(!listMonto.isEmpty()){
                Pas pas = (Pas)listMonto.get(0).getPas();
                for (Monto monto : listMonto){
                    monto.getFecha_tramite();
                    monto.getFecha_prox_tramite();
                    monto.getMonto();
                }
                request.getSession().setAttribute("L_Montos", listMonto);
                request.getSession().setAttribute("PAS_VIGENCIA", pas);
            }else{
                salida = SALIDA_1;
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_Pre_MontosPAS.msg1"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_MontosPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_MontosPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"A_Pre_PAS", };
        final int SALIDA_0 = 0;

        int salida = SALIDA_0;
//Checking for actors director_DDP, encargado_pas
            if (!CohesionActor.checkActor(request, 18)) {
                return mapping.findForward(CohesionActor.SALIDA_ACTOR);
            }
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            F_ModificarMontosPas fF_ModificarMontosPas = (F_ModificarMontosPas)form;
            /*Empieza nuestro codigo*/
            String newMontoString = fF_ModificarMontosPas.getMonto_modificar()[0];
            String newfchTramite = fF_ModificarMontosPas.getFecha_tramite_modif()[0];
            String newfchProxTrm = fF_ModificarMontosPas.getFecha_prox_tramite_modif()[0];

            if(!newMontoString.equals("") || !newfchTramite.equals("") || !newfchProxTrm.equals("")){
                int newMontoInt = Integer.parseInt(newMontoString);
                Pas pasVigencia = (Pas)request.getSession().getAttribute("PAS_VIGENCIA");
                Monto newMonto = new Monto();

                if (newfchTramite.equals("")) {
                    newMonto.setFecha_tramite(null);
                } else {
                    newMonto.setFecha_tramite(new ve.usb.cohesion.runtime
                            .LocalDate(newfchTramite));
                }
                if (newfchProxTrm.equals("")) {
                    newMonto.setFecha_prox_tramite(null);
                } else {
                    newMonto.setFecha_prox_tramite(new ve.usb.cohesion.runtime
                            .LocalDate(newfchProxTrm));
                }
                newMonto.setMonto(newMontoInt);
                newMonto.setPas(pasVigencia);
               // pasVigencia.addToMontos(newMonto);
                s.save(newMonto);
                s.update(pasVigencia);
                s.flush();
                fF_ModificarMontosPas.reset(mapping, request);
            }
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==0) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_MontosPAS.msg0"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }

/**
     * Called by Struts for the execution of action A_Pre_ConsultaAvanzadaPAS.
     * 
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_Pre_ConsultaAvanzadaPAS(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        //Salidas
        final String[] SALIDAS = {"V_ConsultaAvanzadaPAS","A_Pre_BuscarProfesorPASConsultaAvanzada", };
        final int SALIDA_0 = 0;
        final int SALIDA_1 = 1;

        int salida = SALIDA_0;
        Session s = HibernateUtil.getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            /*Comienza nuestro codigo*/
            int ci = (Integer) request.getSession().getAttribute("CI_PROF_BUSCAR");
            Profesor prof = (Profesor)s.createQuery("from Profesor prof where prof.ci=:ci").setInteger("ci", ci).uniqueResult();
            List<Pas> listPas = s.createQuery("from Pas pas where pas.profesor.ci=:ci ORDER BY pas.fecha_inicio").setInteger("ci", ci).list();
            int montoTramPas = 0;
            for(Pas pas : listPas){
                pas.getUniversidad();
                for(Monto monto : pas.getMontos()){
                    if(monto.getFecha_tramite() != null){
                        montoTramPas += monto.getMonto();
                    }
                }
            }
            if(listPas.isEmpty()){
                salida = SALIDA_1;
            }
            request.getSession().setAttribute("prof", prof);
            request.getSession().setAttribute("montoTramPas", montoTramPas);
            request.getSession().setAttribute("L_Pas", listPas);
            /*Termina nuestro codigo*/
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        } finally {
            try { s.close(); } catch (Exception ex2) {}
        }
        if (salida==1) {
          request.setAttribute("msg",
            getResources(request).getMessage("A_Pre_ConsultaAvanzadaPAS.msg1"));
        }

        return mapping.findForward(SALIDAS[salida]);
    }
    
}